package com.cedancp.hometrade;

import java.util.HashMap;

import library.UserFunctions;

import org.json.JSONException;
import org.json.JSONObject;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class ElegirMapa extends FragmentActivity{	
	
	Button btn_finalizar;
	Button btn_cancelar;
	private GoogleMap map;
	private LocationManager ubicacionManager;
	private Location ubicacion;
	private boolean hasGpsProvider, hasNetwrokProvider;
	String cod_publicacion;
	private ProgressDialog pDialogo;
	UserFunctions userFunction=new UserFunctions();
	LatLng ubicacion_marker;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_elegir_mapa);
		cod_publicacion=getIntent().getExtras().getString("cod_publicacion");
		btn_finalizar=(Button) findViewById(R.id.btn_finalizar);
		btn_cancelar=(Button) findViewById(R.id.btn_noPosicion);
		map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
		map.setMyLocationEnabled(true);
		
		map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
			
			@Override
			public void onMapClick(LatLng point) {
				
				map.clear();
				map.addMarker(new MarkerOptions().position(point).title("Aqui!"));
				ubicacion_marker=point;
			}
		});
		
		//Update de camera a la ubicacion actual
		ubicacionManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
		hasGpsProvider = ubicacionManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        hasNetwrokProvider = ubicacionManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        if (hasGpsProvider||hasNetwrokProvider) {
        	if(hasGpsProvider){
        		ubicacion=ubicacionManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        	}
        	else{
        		ubicacion=ubicacionManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        	}
        	LatLng ubicacion_actual= new LatLng(ubicacion.getLatitude(), ubicacion.getLongitude());
    		CameraUpdate update=CameraUpdateFactory.newLatLngZoom(ubicacion_actual, 4);
    		map.animateCamera(update);
    		
		}
        else{
        	Toast toast = Toast.makeText(getApplicationContext(), "Imposible obtener ubicacion actual", Toast.LENGTH_SHORT);
			toast.show();
        }
        
        btn_finalizar.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(ubicacion_marker!=null){
					HashMap<String, String> params=new HashMap<String, String>();
		    		params.put("cod_publicacion", cod_publicacion);
		    		params.put("latitud", ""+ubicacion_marker.latitude);
		    		params.put("longitud", ""+ubicacion_marker.longitude);
		    		new UploadUbicacion().execute(params);
				}
				else{
					Toast toast = Toast.makeText(getApplicationContext(), "por favor elige la ubicacion", Toast.LENGTH_SHORT);
					toast.show();
				}
			}
		});
        
        btn_cancelar.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Intent i=new Intent(getApplicationContext(),DetallePublicacion.class);
				i.putExtra("cod_publicacion", cod_publicacion);	
				startActivity(i);
				ElegirMapa.this.finish();
				
			}
		});
		
	}
	
class UploadUbicacion extends AsyncTask<HashMap<String, String>, String, JSONObject>{
		
		@Override
		public void onPreExecute(){
			super.onPreExecute();
			pDialogo=new ProgressDialog(ElegirMapa.this);
			pDialogo.setMessage("Guardando ubicacion...");
			pDialogo.setIndeterminate(false);
            pDialogo.setCancelable(false);
            pDialogo.show();
		}
		
		@Override
		protected JSONObject doInBackground(HashMap<String, String>... params){
			HashMap<String, String> info=params[0];
			String cod_pub=info.get("cod_publicacion");
			String lat=info.get("latitud");
			String lon=info.get("longitud");
			JSONObject json=userFunction.subirUbicacion(cod_pub, lat, lon);
			
			return json;
			
		}
		
		@Override
		protected void onPostExecute(JSONObject json){
			pDialogo.dismiss();
			String error;
			String cod_publicacion;
			String mensaje="";
			int duration = Toast.LENGTH_SHORT;
			try {
				error = json.getString("error");
				if((error.compareTo("0"))==0){
					cod_publicacion=json.getString("cod_publicacion");
					mensaje="La ubicacion se guardo exitosamente";
					Intent i=new Intent(getApplicationContext(),DetallePublicacion.class);
					i.putExtra("cod_publicacion", cod_publicacion);	
					startActivity(i);
					ElegirMapa.this.finish();
				}
				else{
					mensaje=json.getString("error_msg");		
				}
			} catch (JSONException e) {
				e.printStackTrace();
			}
			Toast toast = Toast.makeText(getApplicationContext(), mensaje, duration);
			toast.show();
		}
	}

}
